package com.xygz.orm;

import com.xygz.orm.enums.SQLKeywords;

/**
 * 连接器
 *
 * @author xiyuan-lgz 2025-09-13 @version v1.0.0 新建与整理
 */
public interface SelectJoiner<R> {
    
    SQLKeywords getJoinType();
    
    public <E,W extends ConditionWrapper<E,W>> W query();
    
    <L> SelectJoiner<R> on(SFunc<L, ?> lCol, SFunc<R, ?> rCol);
    
    <L> SelectJoiner<R> on(SFunc<L, ?> lCol, String rCol);
    
    SelectJoiner<R> on(String lCol, SFunc<R, ?> rCol);
    
    
    /**
     * <pre>
     * 多表联查 on条件，
     * 如果 join 超过 3张表 时 需要指定 表名.属性名 方式.
     * 例如：selector.on("tab1.col1", "tab2.col1")
     * </pre>
     *
     * @param lCol 左表左列, 如果 join 超过 3张表 时 需要指定 表名.属性名 方式，例如：tab1.col1
     * @param rCol 右表右列, 如果 join 超过 3张表 时 需要指定 表名.属性名 方式，例如：tab2.col2
     * @return 联表查询器
     */
    abstract SelectJoiner<R> on(String lCol, String rCol);
}
